Sensor de luz y sonido          

Comentarios    

     Sensor de luz y sonido con arduino
      

 

           


El dispositivo permite detectar cuando una luz o un sonido superan un umbral ajustable en el interior de la caja.

Utiliza un arduino Pro mini, dos sensores una de luz y otro de sonido y un display de siete segmentos y cuatro dígitos.

El programa para arduino es:

// Este programa para controlar el disparador de una cámara
// Activado por sonido, o Luz
// Autor:Miguel Prohens
// Fecha: 6/11/2018
// Elementos externos:
// 1.- led conectado al pin 13
// 2.- Sensor de luz y sonido conectados al pin 8
// 5.- 2 pulsadores pin 4, 5 modifican retardo
// 6.- 1 pulsador pin 6 modifica brillo display
// 7.- Optorelé en el pin 12
// 8.- Led de detección pin 11

#include <Arduino.h>
#include <TM1637Display.h>

// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3

// 1- Declaraciones globales
#define RETRASO 1000
#define DISPLAY 6 // Botón para cambiar el brillo del display
#define SUBE 4 //Boton para subir el retraso
#define BAJA 5 // Botón para bajar el retraso

TM1637Display display(CLK, DIO);

const int OPTO=12;
const int DETECCION=11;
const int SENSOR=8;
unsigned long momentoPulsacion = 0;
int retraso=0; // controla el retardo antes del disparo
int brillo=0; // controla el brillo del display
int displayon; // 0 para display apagado 1 para encendido

// 2- Setup
void setup()
{
int k;
pinMode(OPTO, OUTPUT);
pinMode(DETECCION, OUTPUT);
pinMode(SENSOR, INPUT);
pinMode(DISPLAY, INPUT_PULLUP);
pinMode(SUBE, INPUT_PULLUP);
pinMode(BAJA, INPUT_PULLUP);

digitalWrite(OPTO, LOW);
retraso=0; // variables a cero
brillo=0;
displayon=0;
display.setBrightness(0x00); // Brillo a bajo
}

void loop()
{
int k;
uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };

// Botón para aumentar el retardo del disparo
if(retraso < 3000 && digitalRead(SUBE) == LOW)
{
retraso=retraso+50;
displayon=1;
enciendedisplay();
}

// Botón para reducir el retardo del disparo
if(retraso > 49 && digitalRead(BAJA) == LOW)
{
retraso=retraso-50;
enciendedisplay();
}

// Boton BRILLO para el display
if (digitalRead(DISPLAY) == LOW)
{
brillo=brillo+1;
if (brillo==3){brillo=0;} // Si llegamos al valor brillo 4 pasamos a 0
display.setBrightness((brillo)*2, true);
display.showNumberDec(retraso, false); // Refresca el display
delay(250); // para que espere una nueva pulsación del botón
displayon=1;
momentoPulsacion = millis(); // empezamos a contar desde cero el tiempo en ms
}

// Enciende el led de detección y temporización
if (digitalRead(SENSOR)==LOW) //Lectura y acción del sensor
{
// Pasados 1,6 seg fr pulsar un botón el SENSOR empieza a leer datos
if ((millis() – momentoPulsacion) > 1600) //Lectura y acción del sensor
{
digitalWrite(DETECCION, HIGH);
delay(retraso);
digitalWrite(OPTO, HIGH);
delay(100); //se pulsa el botón de la cámara 100 ms
digitalWrite(OPTO, LOW);
digitalWrite(DETECCION, LOW);
delay(500); // Si el objeto rebota y hace otros sonidos 1/2 seg de no detección
}
}

// Apagar el display pasados 1,4 seg de pulsar teclas
if (displayon==1 && (millis() – momentoPulsacion) > 1400)
{
displayon=0; //Indicamos que hasta nueva pulsacion display apagado
display.setBrightness(0, false); // apaga el display
display.showNumberDec(retraso, false); // Escribo el valor de retraso
}
}

// SUBRUTINAS
// Cambia numero en el display
void enciendedisplay(){
displayon=1;
momentoPulsacion = millis(); // empezamos a contar desde cero el tiempo en ms
display.setBrightness(brillo*2, true); //Enciendo el display
display.showNumberDec(retraso, false); //Enseñamos valor de retraso
if (retraso<1050){delay(250);} else{delay(100);} // Contador lento hasta 100 y ràpido hasta 3 seg
}